package main
import(
	"os"
	"io/ioutil"
	"json"
	"image"
	"image/jpeg"
	"image/bmp"
	"image/gif"
	"image/png"
	"image/tiff"
)

type  ConfigT struct{
	Port int
	Resource map[string]string
	HTML,Index string
}
var Config *ConfigT
const DEFAULT_CONFIG_FILE string="server_config.json"
/*
读取配置文件内容，默认配置文件路径设置在DEFAULT_CONFIG_FILE里
*/
func ReadConfig(path string) {
	if(path==""){
		path=DEFAULT_CONFIG_FILE
	}
	Config=new(ConfigT)
	err:=ReadJsonDataFromFile(path,Config)
	LogError(err)
	//读取配置之后需要检查一边，如果配置不正确，则设置为默认值
	Config.CheckConfig()
	image.RegisterFormat("jpeg","",jpeg.Decode,jpeg.DecodeConfig)
	image.RegisterFormat("gif","",gif.Decode,gif.DecodeConfig)
	image.RegisterFormat("png","",png.Decode,png.DecodeConfig)
	image.RegisterFormat("bmp","",bmp.Decode,bmp.DecodeConfig)
	image.RegisterFormat("tiff","",tiff.Decode,tiff.DecodeConfig)
}
/*
从指定文件中读取json信息，并存返回
*/
func ReadJsonDataFromFile(path string,v interface{}) (os.Error){
	data,err:=ioutil.ReadFile(path)
	if(err!=nil){
		//如果找不到指定的文件，则返回错误
		return err
	}
	return ReadJsonData(data,v)
}
/*
从制定数据流中读取json信息，并存放在v里
*/
func ReadJsonData(data []byte,v interface{}) (os.Error){
	err:=json.Unmarshal(data,v)
	if(err!=nil){
		return err
	}
	return nil
}
/*
检查配置文件是否有错误，如果有，则设置为默认值
*/
func (this *ConfigT)CheckConfig(){
	if this.Port==0{
		this.Port=8080
		Log("Port unset,set it to 8080")
	}
	if(this.Resource==nil||len(this.Resource)==0){
		this.Resource=map[string]string{"js":"js","css":"css","image":"media/image"}
		Log("Resource unset, set it..")
	}
	if(this.HTML==""){
		this.HTML="html"
		Log(`HTML unset, set it to "html"`)
	}
	if(this.Index==""){
		this.Index="index.html"
		Log(`Index unset, set it to "index.html"`)
	}
}
